package prototype.copy;

/**
 * 浅拷贝：
 * 创建新对象，有着对原始对象属性值的一份精确拷贝。
 * 基本类型拷贝值，引用类型拷贝内存地址
 * 原对象中引用值的改变会影响新对象
 *
 * 深拷贝：
 * 将原对象从内存中完整的拷贝一份，从内存中开辟新的区域存放对象
 * 修改原对象不会影响新对象
 */
public class CopyTest {
    public static void main(String[] args) {
        //1. 定义老师1
        Teacher teacher1 = new Teacher("刘老师");
        //2. 定义学生1
        //3. 老师1关联学生1
        Student s1 = new Student("s1", teacher1);
        //4. 复制学生1，生成学生2
        Student s2 = s1.clone();
        s2.setName("s2");
        //5. 修改学生2的老师
        s2.getTeacher().setName("999");
        //6. 观察学生1的老师是否变更
        System.out.println(s1);
        //浅拷贝：学生1的老师也变成了999，因为s2和s1指针指向同一个teacher1
        //深拷贝：重写clone方法时，不仅将当前对象克隆，并将所有引用类型也进行克隆
    }
}
